оригинал « » Часть II: Particle Emitter 2 | Wolverine | 08.06.06

»    Часть I: Particle Emitter 1
»    Часть II: Particle Emitter 2 Подстатья расскажет Вам о Particle Emitter 2

Подстатья расскажет Вам о Particle Emitter 2

Нам понадобятся:
-War3ModelEditor; перевод NETRAT'а можно скачать здесь
-mdlVis не выше версии 1.21 (да-да, для создания источников частиц в W3ME нужна эта программа!)
-Блокнот (или другой текстовый редактор);

Это самый распространённый вид частиц, используемых в варовских моделях, поэтому начинаю с него.

Итак, начнём-с…

Конечно, необходим пример. Сегодня вы под моим руководством сделаете (по крайней мере, попытаетесь)… огненную эльфийскую лучницу!

1. Отрываем (как это не странно звучит) W3ME. Заходим в MPQ-браузер («Окна –> Браузер MPQ-архивов»). Жмем «Файл –> War3.mpq» Там открываем лучницу эльфов (Units\NightElf\Archer\Archer.mdx).

Не забудьте её либо экспортировать («Файл –> Экспорт»), либо сохранить («Файл –> Сохранить как), чтобы потом открыть mdlVis’ом.

2. Для начала нужно прилепить по источнику огня к двум шарам на концах лука (ну они прям напрашиваются). Так, текстура… Откройте ещё один раз W3ME, там браузер MPQ, вытащите из War3x.mpq текстуру «Textures\Clouds8x8.blp» и киньте ее в папку с сохраненной лучницей.

3. Жмем «Окна –> Менеджер текстур». Щелчок правой кнопки вызовет меню. Выберите там «Импорт». В открывшемся окне найдите ту текстуру Clouds8x8.blp, которую вытащили на предыдущем шаге.

4. Открываем «Окна –> Редактор узлов». Там много костей и прочего. Теперь надо определить, куда прикреплять источники. Для этого воспользуемся mdlVis’ом.

5. Откройте сохраненную вами модель в mdlVis (максимум версия 1.21!!!). Зайдите в редактор анимаций (F3). Там несложно обнаружить, что те самые шары прикреплены к костям Box12 и Box02. Выбираем Box02, жмем «Двигать».

6. В W3ME в редакторе узлов находим кость Box02, щелкаем правой кнопкой, выбираем «Создать источник частиц 2». Потом щелкаем правой кнопкой по новому источнику UNNAMED, там выбираем «Редактировать узел».

7. Теперь из mdlVis’а в открытое в W3ME окно копируем координаты X, Y и Z соответственно. Потом вместо «UNNAMED» напишите чё-нить (я написал «FireBall1»). Жмем ОК.

Координаты должны быть эти: (-3.92160, -31.97090, 63.99700)

8. Самое интересное. Теперь сделайте двойной щелчок по FireBall1. Объясняю по порядку:

8.1) Видимость. Список кадров, в которые видимость источника изменяется.
8.2) Частота излучения. Количество генераций (spawn) частиц в секунду
8.3) Скорость. Скорость полёта. Также влияет на время жизни и дальность полета.
8.4) Кучность. Увеличивает скорость и направляет поток также и в противоположную сторону.
8.5) Широта. Отвечает за угол отклонения частицы - фактически это максимальный угол для вектора случайного отклонения
8.6) Ширина/Длина. Дело в том, что частицы появляются в плоском прямоугольнике. Это его длина и ширина.
8.7) Рендеринг. Там указывается используемая текстура и фильтрация.
8.8) Сегмент 1-3. Переход между цветами (напр, огонь – красный-оранжевый-желтый). Цвет, альфа (видимость: 255 – видно полностью, 0 – не видно), масштаб (размеры частиц данного цвета)
8.9) Голова/Хвост (появление/затухание). Появление и исчезание головы и хвоста (см. далее). Начало/конец – на каком расстоянии от центра; Повтор – кол-во повторов. Хотя как это работает и какая разница между разными значениями, непонятно…
8.10) Флаги:
8.10.1) Незатуманенный – на него не влияют источники света (он всегда освещен) – просто NETRAT поменял названия «незатуманенный» м «незатененный» местами…
8.10.2) Незатененный – это значит, что он будет виден сквозь туман (задается в параметрах карты). Также на него не накладывается затеняющий фильтр при открытии меню.
8.10.3) Альфа – ХЗ
8.10.4) Линейный излучатель – излучает только в плоскости YZ
8.10.5) Sort primitives far Z – указывает движку War'а на то, что частицы нужно отображать в порядке "от дальней к ближней" (иначе они рисуются в произвольном порядке). Обычно указывается при создании эффекта лёгкого дыма (фильтр Blend). Для тех же целей используется параметр "PriorityPlane" (позже напишу русский эквивалент названия)
8.10.6) На источник не действует движение – он как бы в невесомости.
8.10.7) XY квадрат - излучает квадраты (плоские то бишь) в пл-ти ХУ
8.10.8) Струя. Параметр используется для создания реалистичных взрывов (и во "взрывных" моделях War попадается часто). Он влияет на анимацию частиц и учитывается War'ом, только если "EmissionRate" (частота излучения) источника анимирована, а тип контроллера анимации - Bezier. В этом случае в ключевых кадрах частицы появляются очень резко и кучно. В остальных случаях параметр игнорируется. Поскольку W3ME не позволяет анимировать параметры источников частиц, от этого флага нет особого проку.
8.10.9) Голова. Если не ставить галку на «Струя», она идет по умолчанию, так что ей галку можно не ставить. Частицы просто отдаляются от центра без деформации.
8.10.10) Хвост. Тут частицы растягиваются, т.е. она остается прикреплена к центру, но при этом тянется до места исчезновения.Скрин 1

» Нажмите для увеличения «

Если поставить одновременно «Голова» и «Хвост», сначала будет растянутая частица, а за ней обычная.

Поставьте значения, как на скрине 1. В видимость запишите

199333: 0

Теперь скопируйте этот источник (Правая –> Дублировать) и с помощью нажатия правой в выбирания там «Вверх», «Вниз», «Вправо», «Влево» сделайте этому источнику родительской кость Box12. Из mdlVis’а вставьте копии источника новые координаты.

Скрин 2

» Нажмите для увеличения «Они должны быть (-3.92160, 74.16950, 64.32700).
Я назвал этот источник «FireBall2».
Также придется открыть свойства двойным щелчком и выбрать текстуру (фиг знает, пчму она скидывается). Огонь на шарах готов. Теперь можно дублировать каждый из источников и сделать в настройках размеры частиц поменьше. Это нужно для того, чтобы огонь осиавлял за собой след при движении.

Примечание: эти два источник можно прикрепить и к кости Cylinder02, но тогда придется нажать правой по источнику, там выбрать «Редактировать узел» и поставить галку на «Billboarded» (т.е. участок будет всегда повёрнут лицевой стороной к пользователю). Я сделал именно так (см. скрин 2).


Теперь сделаем огненную тетиву.
В mdlVis’е видно, что тетива прикрепляется к костям Box01 и Mesh03.Скрин 3

» Нажмите для увеличения «

Щелкните по Box01 правой и создайте новый источник. В координатах запишите координаты кости-родителя (-3.66772, -24.3604, 67.1364). Галки не ставьте. Также щелкните там по кнопке «Поворот», затем ОК. Потом объясню. Теперь списывайте со скрина 3, пока никто не видит… У меня это «FireLine1»

Дублируйте источник и присоедините его к Mesh03. Настройте текстуру. В координатах – координаты родительской кости (-3.66772, 68.1433, 66.836). Щелкните по кнопке «Поворот», птом ОК. Это «FireLine2». Готово, но одна проблема – распространение частиц направлено вверх…

Лажа в том, что поворот в W3ME настроить нельзя (он как-то криво работает – перед тем, как в окне «Поворот» вы нажали ОК, там стояли координаты { 0, 0, 0, 1 }, а после этого - { 0, 0, 1, 0 }, хотя ничего не меняли…), поэтому придется это настраивать с помощью блокнота. Сохраните модель в *.mdl. (я сохранил как «FArcher.mdl»).

Теперь вернёмся к mdlVis’у. В редакторе анимаций выберите кость Box01 в поверните её в плоскости YZ на -90 градусов, а кость Mesh03 – на 90. Это надо будет для поворота источников. Сохраните эту модель как-нить типа 1.mdl (смотрите не перепишите модель из W3ME!!!). Откройте 1.mdl в блокноте и в поиске (Ctrl+F) найдите «Box01». Там в блоке поворотов самая первая строка будет

Это результат недавнего вращения кости. То же самое с Mesh03. Там строка отличается на один «минус»:


Теперь откройте FArcher.mdl и там найдите через поиск «Line1». Он найдет источник «FireLine1». В нем будет блок поворотов (Rotation), который вписался благодаря тому, что вы нажимали «Поворот –> ОК». Так бы пришлось создавать вручную, но зачем это нужно? В блоке написано

Нужно все координаты заменить на { -0.707107, 0, 0, 0.707107 }, но если заменить только в нуле, при первой же анимации они восстановят начальное положение, птму надо менять для каждой анимы. В mdlVis’е перебирайте все анимации по очереди и записывайте начальный кадры, присваивая им нужные координаты. В итоге должно получиться так:

ParticleEmitter2 "FireLine1" {
ObjectId 62,
Parent 21,
Rotation 12 {
DontInterp,
167: { -0.707107, 0, 0, 0.707107 },
1500: { -0.707107, 0, 0, 0.707107 },
3667: { -0.707107, 0, 0, 0.707107 },
7467: { -0.707107, 0, 0, 0.707107 },
11500: { -0.707107, 0, 0, 0.707107 },
15933: { -0.707107, 0, 0, 0.707107 },
17100: { -0.707107, 0, 0, 0.707107 },
18267: { -0.707107, 0, 0, 0.707107 },
34333: { -0.707107, 0, 0, 0.707107 },
39733: { -0.707107, 0, 0, 0.707107 },
46667: { -0.707107, 0, 0, 0.707107 },
99333: { -0.707107, 0, 0, 0.707107 },
}
Additive,

Для FireLine2 будет то же, но тока без «минусов»:
...
ParticleEmitter2 "FireLine2" {
ObjectId 62,
Parent 21,
Rotation 12 {
DontInterp,
167: { 0.707107, 0, 0, 0.707107 },
1500: { 0.707107, 0, 0, 0.707107 },
3667: { 0.707107, 0, 0, 0.707107 },
7467: { 0.707107, 0, 0, 0.707107 },
11500: { 0.707107, 0, 0, 0.707107 },
15933: { 0.707107, 0, 0, 0.707107 },
17100: { 0.707107, 0, 0, 0.707107 },
18267: { 0.707107, 0, 0, 0.707107 },
34333: { 0.707107, 0, 0, 0.707107 },
39733: { 0.707107, 0, 0, 0.707107 },
46667: { 0.707107, 0, 0, 0.707107 },
99333: { 0.707107, 0, 0, 0.707107 },
}
Additive,


Внимание! Если в строке «Parent» у вас стоит другое значение, не меняйте его!

Вернитесь в начало файла в блок текстур и измените «Clouds8x8.blp» на «Textures\Clouds8x8.blp», чтобы Вар использовал стандартную текстуру.Скрин 4

» Нажмите для увеличения «

Ну а теперь последний штрих – горящие глаза.
В mdlVis’е выберите треугольники, которые текстурируются как левый глаз. У меня получилось так:
(3.94080, -1.97630, 92.70400)
Координаты правого глаза, не задумываясь, принимаем за (3.94080, 1.97630, 92.70400), т.к. модель симметрична относительно XOZПоследний скрин

» Нажмите для увеличения «

Глаза движутся вместе с головой, а голова прикреплена к кости «Head mesh», так что создаем на ней источник частиц. Пишем координаты левого глаза, ставим «Billboarded» и жмем ОК. Воруем информацию с 4-ого скрина. Дублируем источник, изменив название и стерев «минус» у координаты Y.

Последний скрин иллюстрирует результат.



Ну вот. Пока хватит. Потом как-нить расскажу про Ribbon’ы, но надо сначала придумать пример.